BRIC Project

# clear workspace
##rm(list=ls())

getting the current WD

getwd()
[1] "/Users/Manu/Documents/GitHub/bric_ap_project"

changing the WD

##setwd("/Users/Manu/Desktop/TUM_Master_Mgt_Technology/TUM_SS_21/Empirical Asset Pricing seminar/Seminar Thesis/BRIC_data")

Loading Libraries

# loading libraries
library(data.table) # extension of the data.frame package. It is widely used for fast aggregation of large datasets, low latency add/update/remove of columns, quicker ordered joins, and a fast file reader.
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
data.table 1.14.0 using 1 threads (see ?getDTthreads).  Latest news: r-datatable.com
**********
This installation of data.table has not detected OpenMP support. It should still work but in single-threaded mode.
This is a Mac. Please read https://mac.r-project.org/openmp/. Please engage with Apple and ask them for support. Check r-datatable.com for updates, and our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/Installation. After several years of many reports of installation problems on Mac, it's time to gingerly point out that there have been no similar problems on Windows or Linux.
**********
library(dplyr) # data manipulation package
package ‘dplyr’ was built under R version 3.6.2
Attaching package: ‘dplyr’

The following objects are masked from ‘package:data.table’:

    between, first, last

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(lubridate)
package ‘lubridate’ was built under R version 3.6.2
Attaching package: ‘lubridate’

The following objects are masked from ‘package:data.table’:

    hour, isoweek, mday, minute, month, quarter, second, wday, week,
    yday, year

The following objects are masked from ‘package:base’:

    date, intersect, setdiff, union
library(zoo) # methods for totally ordered indexed observations. It aims at performing calculations containing irregular time series of numeric vectors, matrices & factors

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric
library(stats)
library(utils)

Loading in the R.data

Data column descriptions (Worldscope): https://www.professors.wi.tum.de/fileadmin/w00bca/fm/Worldscope_Data_Definition_Guide_Issue_15.pdf

https://docs.google.com/spreadsheets/d/1YtuJiv60Q6nKIaFJLQY60sGQErbsl_8nvPdUHmvO8vM/edit?usp=sharing

# loading R.data BRIC monthly
load("/Users/Manu/Desktop/TUM_Master_Mgt_Technology/TUM_SS_21/Empirical Asset Pricing seminar/Seminar Thesis/BRIC_data/BRIC_monthly.RData")

# loading R.data BRIC monthly
load("/Users/Manu/Desktop/TUM_Master_Mgt_Technology/TUM_SS_21/Empirical Asset Pricing seminar/Seminar Thesis/BRIC_data/BRIC_static.RData")

# loading R.data BRIC monthly
load("/Users/Manu/Desktop/TUM_Master_Mgt_Technology/TUM_SS_21/Empirical Asset Pricing seminar/Seminar Thesis/BRIC_data/BRIC_yearly.RData")
str(BRIC.monthly)
Classes ‘data.table’ and 'data.frame':  5525758 obs. of  13 variables:
 $ Id     : Factor w/ 96201 levels "130022","130038",..: 17 17 17 17 17 17 17 17 17 17 ...
 $ country: chr  "BRA" "BRA" "BRA" "BRA" ...
 $ Date   : Date, format: "1979-12-31" "1980-01-31" ...
 $ MV     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ MV.USD : num  NA NA NA NA NA NA NA NA NA NA ...
 $ RET    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ RET.USD: num  NA NA NA NA NA NA NA NA NA NA ...
 $ PCH    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ PCH.USD: num  NA NA NA NA NA NA NA NA NA NA ...
 $ UP     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ NOSH   : num  NA NA NA NA NA NA NA NA NA NA ...
 $ AF     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ym     : 'yearmon' num  Dec 1979 Jan 1980 Feb 1980 Mar 1980 ...
 - attr(*, ".internal.selfref")=<externalptr> 
 - attr(*, "sorted")= chr "Id"

Importing the Risk free Rate Data

download T-bill data from Kenneth French Website for the risk free rate

# import the Kenneth/French risk free rate (1month T-bill rate)
kf_data <- read.csv("/Users/Manu/Desktop/TUM_Master_Mgt_Technology/TUM_SS_21/Empirical Asset Pricing seminar/Seminar Thesis/BRIC_data/F_F_Research_Data_Factors.csv")

kf_data

# extracting the risk free rate
one_m_tbill <- kf_data$RF


tail(kf_data)
NA
# summary stats
summary(BRIC.monthly)
       Id            country               Date                  MV         
 130117 :    469   Length:5525758     Min.   :1979-12-31   Min.   :      0  
 130139 :    469   Class :character   1st Qu.:1989-09-29   1st Qu.:    108  
 130143 :    469   Mode  :character   Median :1999-06-30   Median :   1060  
 130147 :    469                      Mean   :1999-06-30   Mean   :  14435  
 130165 :    469                      3rd Qu.:2009-03-31   3rd Qu.:   4416  
 130169 :    469                      Max.   :2018-12-31   Max.   :8524587  
 (Other):5522944                                           NA's   :4035736  
     MV.USD              RET             RET.USD             PCH         
 Min.   :0.00e+00   Min.   :-100      Min.   :-100      Min.   :  -100   
 1st Qu.:3.00e+00   1st Qu.:  -7      1st Qu.:  -8      1st Qu.:    -8   
 Median :4.40e+01   Median :   0      Median :   0      Median :     0   
 Mean   :1.14e+05   Mean   :   2      Mean   :   2      Mean   :     3   
 3rd Qu.:4.30e+02   3rd Qu.:   7      3rd Qu.:   8      3rd Qu.:     7   
 Max.   :2.90e+10   Max.   : 888      Max.   : 903      Max.   :599900   
 NA's   :4035736    NA's   :4044505   NA's   :4044505   NA's   :4042312  
    PCH.USD              UP               NOSH                 AF         
 Min.   :  -100    Min.   :      0   Min.   :0.000e+00   Min.   :     0   
 1st Qu.:    -8    1st Qu.:      4   1st Qu.:5.800e+03   1st Qu.:     1   
 Median :     0    Median :     12   Median :2.500e+04   Median :     1   
 Mean   :     2    Mean   :    285   Mean   :3.569e+06   Mean   :    14   
 3rd Qu.:     7    3rd Qu.:     39   3rd Qu.:2.221e+05   3rd Qu.:     1   
 Max.   :442446    Max.   :3515086   Max.   :1.296e+10   Max.   :225326   
 NA's   :4041888   NA's   :3529642   NA's   :3737333     NA's   :3757210  
       ym      
 Min.   :1980  
 1st Qu.:1990  
 Median :1999  
 Mean   :1999  
 3rd Qu.:2009  
 Max.   :2019  
               
str(BRIC.static)
Classes ‘data.table’ and 'data.frame':  11783 obs. of  41 variables:
 $ GEOGN  : chr  "BRAZIL" "BRAZIL" "BRAZIL" "BRAZIL" ...
 $ GEOLN  : chr  "BRAZIL" "BRAZIL" "BRAZIL" "BRAZIL" ...
 $ NAME   : chr  "ACOS VILL ON DEAD - DELIST07/02/11" "CASA ANGLO ON 1000 DEAD - BRUPT.28/03/00" "CENTRAIS ELECTRICAS DE SANTA CATAR ON" "AMPLA ENERGIA E SERVICOS ON" ...
 $ ECNAME : chr  "ACOS VILLARES SA" "CASA ANGLO" "CENTRAIS ELETRICAS DE SANTA CATARINA SA" "AMPLA ENERGIA E SERVICOS SA" ...
 $ ENAME  : chr  "ACOS VILL ON DEAD - DELIST07/02/11" "CASA ANGLO ON 1000 DEAD - BRUPT.28/03/00" "CENTRAIS ELECTRICAS DE SANTA CATAR ON" "AMPLA ENERGIA E SERVICOS ON" ...
 $ PNAME  : chr  "ACOS VILL ON 1000" NA NA "AMPRA ENERG ON 1000" ...
 $ TYPE   : chr  "EQ" "EQ" "EQ" "EQ" ...
 $ MAJOR  : chr  "Y" "Y" "Y" "Y" ...
 $ ISINID : chr  "P" "P" "P" "P" ...
 $ GGISN  : chr  "BR" "BR" "BR" "BR" ...
 $ PCUR   : chr  "C" "C" "C" "C" ...
 $ EXNAME : chr  "Sao Paulo" "Sao Paulo" "Sao Paulo" "Sao Paulo" ...
 $ ESTAT  : chr  "DEAD" "DEAD" "ACT." "ACT." ...
 $ ICBSUC : int  1757 5373 7537 7535 3722 7537 2713 3355 8355 3577 ...
 $ INDG   : int  56 87 96 169 59 96 98 63 102 71 ...
 $ INDM   : chr  "Iron & Steel" "Broadline Retailers" "Alt. Electricity" "Con. Electricity" ...
 $ WC06011: int  5291 7020 8220 8220 4992 8592 1320 NA NA 4670 ...
 $ WC07021: int  3312 5311 4911 4911 3965 4911 3721 NA NA 2011 ...
 $ WC07022: int  3316 6141 4924 NA 2844 6719 4581 NA NA 2075 ...
 $ WC07023: int  6719 6021 6719 NA 3421 NA 3728 NA NA 2015 ...
 $ WC07024: int  NA NA NA NA 3561 NA 8249 NA NA NA ...
 $ WC07025: int  NA NA NA NA 3262 NA NA NA NA NA ...
 $ WC07026: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC07027: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC07028: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC07040: chr  "1757" NA "7537" "7535" ...
 $ WC07041: 'integer64' num  2.53e-314 2.64e-314 2.92e-314 2.92e-314 2.67e-314 ...
 $ ISIN   : chr  "BRAVILACNOR1" "BRCABRACNOR3" "BRCLSCACNOR6" "BRCBEEACNOR3" ...
 $ LOC    : chr  "BRAVIL3" "BRCABR3" "BRCLSC3" "BRCBEE3" ...
 $ SECD   : chr  "2006341" "2177225" "B19PKR9" "2160902" ...
 $ MNEM   : chr  "BR:AV3" "BR:CA3" "BR:CL3" "BR:CJ3" ...
 $ A4NAME : chr  NA NA NA NA ...
 $ IBTKR  : chr  "@:@7AE" NA NA "@:@7C8" ...
 $ BDATE  : Date, format: "1990-02-05" "1991-01-30" ...
 $ ESBDT  : Date, format: NA NA ...
 $ TIME   : Date, format: "2011-02-04" "1999-01-28" ...
 $ EDATE  : Date, format: NA NA ...
 $ WC18272: int  1944 1913 NA 1883 NA 19620611 19690819 NA NA NA ...
 $ WC07015: Date, format: "2011-02-07" "2000-03-30" ...
 $ Id     : chr  "130117" "130139" "130143" "130147" ...
 $ country: chr  "BRA" "BRA" "BRA" "BRA" ...
 - attr(*, ".internal.selfref")=<externalptr> 
 - attr(*, "sorted")= chr "GEOGN"

ISIN: International Security Identification Number (stock identifier) ESTAT: active vs inactive company (publicly listed or not) Id: join column with BRIC.yearly dataframe INDM: industry sector code

GEOGN: geographic group name GEOLN: geographic location

List of Database codes: https://www.bwl.uni-mannheim.de/media/Lehrstuehle/bwl/Maug/Database_info/Datastream_dataypes.pdf

str(BRIC.yearly)
Classes ‘data.table’ and 'data.frame':  459498 obs. of  105 variables:
 $ Id     : Factor w/ 96201 levels "130022","130038",..: 17 17 17 17 17 17 17 17 17 17 ...
 $ country: chr  "BRA" "BRA" "BRA" "BRA" ...
 $ ICBSUC : int  1757 1757 1757 1757 1757 1757 1757 1757 1757 1757 ...
 $ WC07021: int  3312 3312 3312 3312 3312 3312 3312 3312 3312 3312 ...
 $ YEAR   : int  1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 ...
 $ W05651 : num  NA NA NA NA NA NA NA NA NA NA ...
 $ W08006 : num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01001: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC01051: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01075: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01076: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01084: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01101: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01151: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01201: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01230: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01245: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01249: Factor w/ 523677 levels "209033","220729",..: NA NA NA NA NA NA NA 932 932 3653 ...
 $ WC01250: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01251: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01255: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01266: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01271: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC01301: int  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01401: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01451: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01501: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01505: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01551: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC01651: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02001: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02005: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02051: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02099: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02101: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02140: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC02201: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC02214: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC02301: num  NA NA NA NA NA NA NA 0 0 3 ...
 $ WC02501: num  NA NA NA NA NA NA NA 0 0 2 ...
 $ WC02999: num  NA NA NA NA NA NA NA 0 0 3 ...
 $ WC03040: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03051: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03054: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03060: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC03063: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC03069: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC03101: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03151: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03251: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03255: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03262: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC03263: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03351: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03426: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03451: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03480: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03495: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC03501: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03995: num  NA NA NA NA NA NA NA 0 0 1 ...
 $ WC03999: num  NA NA NA NA NA NA NA 0 0 3 ...
 $ WC04055: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04100: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04101: int  NA NA NA NA NA NA NA NA 0 0 ...
 $ WC04199: int  NA NA NA NA NA NA NA NA 0 0 ...
 $ WC04201: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC04251: num  NA NA NA NA NA NA NA NA 0 0 ...
 $ WC04551: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC04601: num  NA NA NA NA NA NA NA NA 0 0 ...
 $ WC04751: num  NA NA NA NA NA NA NA NA 0 0 ...
 $ WC04825: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04826: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04827: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04828: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04829: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04830: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC04860: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC05001: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC05101: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC05202: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC05301: num  NA NA NA NA NA ...
 $ WC05350: Factor w/ 4261 levels "","29.06.1999",..: NA NA NA NA NA NA NA 336 337 140 ...
 $ WC05376: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC05401: int  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC05476: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC05491: num  NA NA NA NA NA NA NA 0 0 0 ...
 $ WC05505: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC05508: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC05651: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC05905: Factor w/ 9289 levels "","01.03.2017",..: NA NA NA NA NA NA NA NA NA NA ...
 $ WC06798: int  NA NA NA NA NA NA NA NA NA NA ...
 $ WC07011: int  NA NA NA NA NA NA NA 5115 9961 9702 ...
 $ WC07210: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC08001: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC08002: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC08004: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC08006: num  NA NA NA NA NA NA NA NA NA NA ...
 $ WC08256: num  NA NA NA NA NA ...
 $ WC08301: num  NA NA NA NA NA ...
  [list output truncated]
 - attr(*, ".internal.selfref")=<externalptr> 
 - attr(*, "sorted")= chr "Id"
head(BRIC.yearly)

ID: ?? Country: 4 BRIC COUNTRY CODES ICBSUC: industrial classification benchmark https://link.springer.com/content/pdf/bbm%3A978-3-8350-9531-1%2F1.pdf

WC07021: SIC(standard industrial classification) primary code from Worldscope W05651: Common Shares Traded - Annual (Security)

summary(BRIC.yearly)
       Id           country              ICBSUC         WC07021      
 130117 :    39   Length:459498      Min.   : 533    Min.   : 111    
 130139 :    39   Class :character   1st Qu.:2723    1st Qu.:2821    
 130143 :    39   Mode  :character   Median :3577    Median :3552    
 130147 :    39                      Mean   :4442    Mean   :3915    
 130165 :    39                      3rd Qu.:6535    3rd Qu.:4924    
 130169 :    39                      Max.   :9578    Max.   :9721    
 (Other):459264                      NA's   :13572   NA's   :128973  
      YEAR          W05651              W08006            WC01001          
 Min.   :1980   Min.   :        0   Min.   :       0   Min.   :  -1897610  
 1st Qu.:1989   1st Qu.:    35284   1st Qu.:  149737   1st Qu.:    400216  
 Median :1999   Median :   133897   Median :  532443   Median :   1331283  
 Mean   :1999   Mean   :  2042004   Mean   : 1791848   Mean   :  15112089  
 3rd Qu.:2009   3rd Qu.:   359423   3rd Qu.: 1013663   3rd Qu.:   4894690  
 Max.   :2018   Max.   :119768705   Max.   :33165328   Max.   :6546143000  
                NA's   :459397      NA's   :459436     NA's   :361509      
    WC01051              WC01075              WC01076          
 Min.   :  -2687022   Min.   :     -8532   Min.   :  -6697923  
 1st Qu.:    251251   1st Qu.:      7451   1st Qu.:   1979948  
 Median :    919940   Median :    109322   Median :   9823772  
 Mean   :   9572937   Mean   :  18254570   Mean   :  40426730  
 3rd Qu.:   3461544   3rd Qu.:   6006500   3rd Qu.:  33495928  
 Max.   :4647748500   Max.   :1491146740   Max.   :1452100000  
 NA's   :365827       NA's   :453797       NA's   :457878      
    WC01084             WC01101              WC01151         
 Min.   :   -85997   Min.   : -12517580   Min.   :  -101176  
 1st Qu.:    24908   1st Qu.:     45776   1st Qu.:    13206  
 Median :    95116   Median :    121546   Median :    44810  
 Mean   :  1653017   Mean   :   1243122   Mean   :   699597  
 3rd Qu.:   420679   3rd Qu.:    356292   3rd Qu.:   164658  
 Max.   :716521000   Max.   :1047652000   Max.   :613160000  
 NA's   :389761      NA's   :396735       NA's   :365087     
    WC01201              WC01230              WC01245              WC01249      
 Min.   :   -108996   Min.   :-136406123   Min.   :    -47089   0      :    74  
 1st Qu.:      2153   1st Qu.:      3975   1st Qu.:   3202732   4      :     8  
 Median :     16581   Median :     21238   Median :  10363000   1      :     7  
 Mean   :    294735   Mean   :   1423149   Mean   :  36520834   22     :     5  
 3rd Qu.:     56000   3rd Qu.:    136184   3rd Qu.:  30421235   10     :     5  
 Max.   :3850520500   Max.   :2189000000   Max.   :1053486329   (Other): 72311  
 NA's   :428230       NA's   :388237       NA's   :458157       NA's   :387088  
    WC01250              WC01251             WC01255             WC01266         
 Min.   :-457617800   Min.   :   -37900   Min.   :  -124722   Min.   :  -137794  
 1st Qu.:     11608   1st Qu.:     4730   1st Qu.:        0   1st Qu.:     1168  
 Median :     85880   Median :    26696   Median :        0   Median :     6429  
 Mean   :   1707550   Mean   :   578613   Mean   :    51150   Mean   :   171131  
 3rd Qu.:    377127   3rd Qu.:   127970   3rd Qu.:        0   3rd Qu.:    29816  
 Max.   :1660438000   Max.   :234524200   Max.   :109420000   Max.   :116837000  
 NA's   :362257       NA's   :366104      NA's   :407361      NA's   :394891     
    WC01271             WC01301              WC01401          
 Min.   :-15043600   Min.   :-225335300   Min.   :-289914000  
 1st Qu.:    90680   1st Qu.:         0   1st Qu.:     11424  
 Median :  1249570   Median :         0   Median :     77140  
 Mean   : 10713478   Mean   :    -15993   Mean   :   1632255  
 3rd Qu.:  5688000   3rd Qu.:         0   3rd Qu.:    339827  
 Max.   :679414298   Max.   :    287470   Max.   :1580887000  
 NA's   :457543      NA's   :437442       NA's   :361581      
    WC01451             WC01501             WC01505          
 Min.   :-80575000   Min.   :-27276000   Min.   :-238880000  
 1st Qu.:     1961   1st Qu.:        0   1st Qu.:         0  
 Median :    14743   Median :        0   Median :         0  
 Mean   :   440459   Mean   :    46581   Mean   :     -4889  
 3rd Qu.:    73385   3rd Qu.:      476   3rd Qu.:         0  
 Max.   :498333023   Max.   : 75000000   Max.   :  58460662  
 NA's   :362264      NA's   :362720      NA's   :387330      
    WC01551              WC01651              WC02001          
 Min.   :-417475218   Min.   :-417475218   Min.   :  -2250400  
 1st Qu.:      8181   1st Qu.:      8236   1st Qu.:     37850  
 Median :     58858   Median :     58954   Median :    179046  
 Mean   :   1159198   Mean   :   1160424   Mean   :   2323822  
 3rd Qu.:    255842   3rd Qu.:    256518   3rd Qu.:    632348  
 Max.   :1307018000   Max.   :1307018000   Max.   :2704067300  
 NA's   :361555       NA's   :361560       NA's   :363655      
    WC02005              WC02051              WC02099         
 Min.   :  -2250400   Min.   :    -37626   Min.   :   -15881  
 1st Qu.:     38827   1st Qu.:    101493   1st Qu.:    14578  
 Median :    186226   Median :    315546   Median :    87555  
 Mean   :   4736283   Mean   :   3714914   Mean   :   992293  
 3rd Qu.:    676419   3rd Qu.:   1104569   3rd Qu.:   374200  
 Max.   :3852586000   Max.   :3897521400   Max.   :346800000  
 NA's   :361890       NA's   :363997       NA's   :409409     
    WC02101             WC02140             WC02201              WC02214      
 Min.   :  -235016   Min.   :  -633124   Min.   :   -470864   Min.   :0       
 1st Qu.:    49548   1st Qu.:     5814   1st Qu.:    383350   1st Qu.:0       
 Median :   209621   Median :    29418   Median :   1024932   Median :0       
 Mean   :  2145711   Mean   :   530282   Mean   :   7632966   Mean   :0       
 3rd Qu.:   788038   3rd Qu.:   134776   3rd Qu.:   3137342   3rd Qu.:0       
 Max.   :804364000   Max.   :369266850   Max.   :3993722000   Max.   :0       
 NA's   :364513      NA's   :408806      NA's   :368042       NA's   :459485  
    WC02301              WC02501              WC02999         
 Min.   :-1.808e+07   Min.   :-1.698e+04   Min.   :0.000e+00  
 1st Qu.: 2.741e+05   1st Qu.: 1.395e+05   1st Qu.:7.533e+05  
 Median : 8.610e+05   Median : 4.941e+05   Median :2.103e+06  
 Mean   : 1.538e+07   Mean   : 8.949e+06   Mean   :4.752e+07  
 3rd Qu.: 3.195e+06   3rd Qu.: 1.880e+06   3rd Qu.:7.024e+06  
 Max.   : 1.865e+10   Max.   : 1.255e+10   Max.   :3.605e+10  
 NA's   :380376       NA's   :362537       NA's   :361838     
    WC03040              WC03051             WC03054            WC03060        
 Min.   :  -1378248   Min.   :0.000e+00   Min.   :   -2362   Min.   :       0  
 1st Qu.:     47386   1st Qu.:3.650e+04   1st Qu.:    4455   1st Qu.:   19369  
 Median :    168860   Median :2.407e+05   Median :   16950   Median :  296243  
 Mean   :   1896792   Mean   :5.131e+06   Mean   :  179760   Mean   : 3716895  
 3rd Qu.:    640523   3rd Qu.:9.734e+05   3rd Qu.:   57436   3rd Qu.: 2475000  
 Max.   :1068610000   Max.   :4.900e+09   Max.   :81000000   Max.   :82550000  
 NA's   :370003       NA's   :366101      NA's   :421502     NA's   :458833    
    WC03063             WC03069             WC03101          
 Min.   :-14883633   Min.   : -9979722   Min.   :     -2033  
 1st Qu.:     3145   1st Qu.:        0   1st Qu.:    219724  
 Median :    14198   Median :      630   Median :    701758  
 Mean   :   361552   Mean   :   196955   Mean   :   6280780  
 3rd Qu.:    64350   3rd Qu.:    13829   3rd Qu.:   2421447  
 Max.   :358031550   Max.   :278502000   Max.   :3836000000  
 NA's   :412352      NA's   :415132      NA's   :368049      
    WC03151              WC03251              WC03255             WC03262        
 Min.   :-1.544e+09   Min.   :    -16000   Min.   :0.000e+00   Min.   : -577681  
 1st Qu.: 4.368e+03   1st Qu.:         0   1st Qu.:6.925e+04   1st Qu.:       0  
 Median : 2.089e+05   Median :     69565   Median :4.035e+05   Median :       0  
 Mean   : 1.355e+06   Mean   :   6591599   Mean   :1.147e+07   Mean   :   85341  
 3rd Qu.: 8.157e+05   3rd Qu.:    715466   3rd Qu.:1.871e+06   3rd Qu.:       0  
 Max.   : 1.869e+09   Max.   :3691222088   Max.   :6.023e+09   Max.   :77423000  
 NA's   :368072       NA's   :363830       NA's   :362741      NA's   :399444    
    WC03263              WC03351              WC03426         
 Min.   :-132131400   Min.   :-2.368e+06   Min.   :-56852690  
 1st Qu.:     -6938   1st Qu.: 2.776e+05   1st Qu.:        0  
 Median :         0   Median : 9.639e+05   Median :        0  
 Mean   :    289751   Mean   : 3.694e+07   Mean   :   520920  
 3rd Qu.:     14754   3rd Qu.: 3.846e+06   3rd Qu.:    40772  
 Max.   : 787000000   Max.   : 3.370e+10   Max.   :564000000  
 NA's   :367161       NA's   :361845       NA's   :367555     
    WC03451             WC03480             WC03495          
 Min.   :        0   Min.   :-23657100   Min.   :-8.446e+08  
 1st Qu.:        0   1st Qu.:    80000   1st Qu.: 2.336e+04  
 Median :        0   Median :   214018   Median : 1.976e+05  
 Mean   :    71573   Mean   :  1631472   Mean   : 6.377e+06  
 3rd Qu.:        0   3rd Qu.:   610100   3rd Qu.: 8.771e+05  
 Max.   :521400000   Max.   :637333000   Max.   : 1.154e+10  
 NA's   :368921      NA's   :379825      NA's   :382312      
    WC03501              WC03995              WC03999             WC04055        
 Min.   :-7.276e+08   Min.   :-7.276e+08   Min.   :0.000e+00   Min.   :-3712984  
 1st Qu.: 3.092e+05   1st Qu.: 3.124e+05   1st Qu.:7.533e+05   1st Qu.:       0  
 Median : 9.146e+05   Median : 9.211e+05   Median :2.103e+06   Median :       0  
 Mean   : 1.001e+07   Mean   : 1.008e+07   Mean   :4.753e+07   Mean   :   15518  
 3rd Qu.: 2.784e+06   3rd Qu.: 2.799e+06   3rd Qu.:7.024e+06   3rd Qu.:       0  
 Max.   : 1.163e+10   Max.   : 1.163e+10   Max.   :3.605e+10   Max.   :29963781  
 NA's   :361840       NA's   :361846       NA's   :361844      NA's   :435106    
    WC04100             WC04101             WC04199             WC04201          
 Min.   :-175437.0   Min.   :-49891826   Min.   :-49891826   Min.   :-349044000  
 1st Qu.:      0.0   1st Qu.:    -2250   1st Qu.:    -3253   1st Qu.:     26544  
 Median :      0.0   Median :        0   Median :       -8   Median :    117804  
 Mean   :    -13.6   Mean   :    -6615   Mean   :    -7622   Mean   :   2120565  
 3rd Qu.:      0.0   3rd Qu.:        0   3rd Qu.:        0   3rd Qu.:    466311  
 Max.   :   1169.0   Max.   : 70593681   Max.   : 70593681   Max.   :1856720000  
 NA's   :446666      NA's   :422283      NA's   :427220      NA's   :362689      
    WC04251             WC04551             WC04601              WC04751         
 Min.   : -2500625   Min.   :  -127635   Min.   :   -930158   Min.   : -3369220  
 1st Qu.:        0   1st Qu.:        0   1st Qu.:     16436   1st Qu.:        0  
 Median :        0   Median :     9600   Median :     78765   Median :        0  
 Mean   :   312957   Mean   :   467540   Mean   :   1549868   Mean   :    81799  
 3rd Qu.:        0   3rd Qu.:    71962   3rd Qu.:    326236   3rd Qu.:        0  
 Max.   :676933000   Max.   :242430200   Max.   :1641024000   Max.   :659223000  
 NA's   :383305      NA's   :380532      NA's   :366555       NA's   :392452     
    WC04825              WC04826              WC04827          
 Min.   :-1.281e+10   Min.   :-236366500   Min.   :-2.112e+08  
 1st Qu.:-2.155e+05   1st Qu.:   -112943   1st Qu.:-1.424e+04  
 Median :-3.660e+04   Median :    -13297   Median : 1.665e+04  
 Mean   :-7.985e+05   Mean   :   -286788   Mean   : 6.527e+05  
 3rd Qu.: 7.202e+03   3rd Qu.:      7670   3rd Qu.: 1.492e+05  
 Max.   : 1.918e+08   Max.   : 224005900   Max.   : 1.346e+10  
 NA's   :393848       NA's   :398645       NA's   :399572      
    WC04828             WC04829            WC04830              WC04860          
 Min.   :-49857150   Min.   :-7793000   Min.   :-604000000   Min.   :-556060000  
 1st Qu.:        0   1st Qu.:       0   1st Qu.:     -6678   1st Qu.:     -5714  
 Median :        0   Median :       0   Median :         0   Median :     59911  
 Mean   :   202071   Mean   :   11571   Mean   :    -80392   Mean   :   1820530  
 3rd Qu.:      142   3rd Qu.:     454   3rd Qu.:     16910   3rd Qu.:    318090  
 Max.   :318390000   Max.   :15050000   Max.   :1097000000   Max.   :2058000000  
 NA's   :451407      NA's   :451741     NA's   :420744       NA's   :366103      
    WC05001             WC05101             WC05202            WC05301         
 Min.   :        0   Min.   :      0.0   Min.   :-1578480   Min.   :0.000e+00  
 1st Qu.:        5   1st Qu.:      0.0   1st Qu.:       0   1st Qu.:2.152e+04  
 Median :       13   Median :      0.0   Median :       0   Median :1.860e+05  
 Mean   :     6622   Mean   :     41.1   Mean   :    1526   Mean   :5.875e+06  
 3rd Qu.:       47   3rd Qu.:      0.3   3rd Qu.:       3   3rd Qu.:6.012e+05  
 Max.   :150199550   Max.   :1802608.0   Max.   :50299501   Max.   :1.003e+11  
 NA's   :369692      NA's   :369450      NA's   :361827     NA's   :362358     
       WC05350          WC05376             WC05401            WC05476         
           :128388   Min.   :  -127635   Min.   :       0   Min.   :-11284204  
 31.12.2014:  4319   1st Qu.:        0   1st Qu.:       0   1st Qu.:        2  
 31.12.2015:  4289   Median :     6492   Median :       0   Median :        5  
 31.12.2016:  4243   Mean   :   443107   Mean   :    1029   Mean   :     9007  
 31.12.2017:  4192   3rd Qu.:    64000   3rd Qu.:       0   3rd Qu.:       38  
 (Other)   : 81372   Max.   :242430200   Max.   :16060700   Max.   :159986993  
 NA's      :232695   NA's   :376194      NA's   :365099     NA's   :362557     
    WC05491             WC05505           WC05508             WC05651         
 Min.   :-11284204   Min.   :    -74   Min.   :     -900   Min.   :        0  
 1st Qu.:        2   1st Qu.:      0   1st Qu.:        2   1st Qu.:        0  
 Median :        5   Median :      0   Median :        7   Median :    68490  
 Mean   :     8786   Mean   :    407   Mean   :     9000   Mean   :  2061175  
 3rd Qu.:       38   3rd Qu.:      3   3rd Qu.:       76   3rd Qu.:   327368  
 Max.   :159986993   Max.   :6814949   Max.   :146841160   Max.   :119768705  
 NA's   :362529      NA's   :367142    NA's   :361813      NA's   :459388     
       WC05905          WC06798          WC07011          WC07210         
           :128388   Min.   : NA      Min.   :     0   Min.   :0.000e+00  
 30.05.2017:   629   1st Qu.: NA      1st Qu.:   645   1st Qu.:2.037e+04  
 30.05.2018:   626   Median : NA      Median :  1574   Median :2.003e+05  
 14.07.2003:   583   Mean   :NaN      Mean   :  5642   Mean   :1.299e+06  
 30.05.2016:   520   3rd Qu.: NA      3rd Qu.:  3891   3rd Qu.:7.577e+05  
 (Other)   : 89056   Max.   : NA      Max.   :685000   Max.   :1.845e+09  
 NA's      :239696   NA's   :459498   NA's   :399221   NA's   :381008     
    WC08001             WC08002             WC08004             WC08006        
 Min.   :0.000e+00   Min.   :0.000e+00   Min.   :0.000e+00   Min.   :       0  
 1st Qu.:6.978e+05   1st Qu.:5.022e+05   1st Qu.:2.480e+05   1st Qu.:       0  
 Median :2.602e+06   Median :2.299e+06   Median :1.361e+06   Median :  162668  
 Mean   :2.249e+07   Mean   :2.128e+07   Mean   :1.230e+07   Mean   : 1397315  
 3rd Qu.:7.832e+06   3rd Qu.:7.265e+06   3rd Qu.:4.594e+06   3rd Qu.:  744360  
 Max.   :8.104e+09   Max.   :8.104e+09   Max.   :3.757e+09   Max.   :33165328  
 NA's   :381011      NA's   :376629      NA's   :405161      NA's   :459430    
    WC08256          WC08301            WC08326              WC08371        
 Min.   :-13.5    Min.   :-31552.6   Min.   :-1941550.0   Min.   :-47037.4  
 1st Qu.:  0.0    1st Qu.:     2.2   1st Qu.:       2.1   1st Qu.:     2.2  
 Median :  2.3    Median :     8.7   Median :       5.3   Median :     8.6  
 Mean   : 16.4    Mean   :     4.2   Mean   :     -17.7   Mean   :     5.4  
 3rd Qu.: 26.8    3rd Qu.:    17.0   3rd Qu.:       9.4   3rd Qu.:    16.9  
 Max.   :100.0    Max.   : 15479.0   Max.   :    7053.0   Max.   :194230.1  
 NA's   :386427   NA's   :375174     NA's   :372069       NA's   :375847    
    WC18100              WC18155              WC18191          
 Min.   :-1.068e+09   Min.   :-400514700   Min.   :-288394000  
 1st Qu.: 1.328e+06   1st Qu.:     34812   1st Qu.:     33486  
 Median : 3.838e+06   Median :    139952   Median :    123501  
 Mean   : 3.289e+07   Mean   :   2479550   Mean   :   2230634  
 3rd Qu.: 1.113e+07   3rd Qu.:    566846   3rd Qu.:    504499  
 Max.   : 9.571e+09   Max.   :1952666000   Max.   :1612885000  
 NA's   :386752       NA's   :367883       NA's   :366119      
    WC18198          
 Min.   :-230612000  
 1st Qu.:     55925  
 Median :    182969  
 Mean   :   2986076  
 3rd Qu.:    712489  
 Max.   :1947870000  
 NA's   :368753      

TO DO’s:

Project Dates: Thesis submission: June 21 Final presentation: June 07

Strategy: GDP weighted countries; stock level: max sharpe ratio, min volatility, equal sector weights or quotas, momentum?

EDA

summary(BRIC.monthly$ym)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1980    1990    1999    1999    2009    2019 
# finding the number of NA values by column in the dataframe
BRIC.monthly %>% mutate_all(is.na) %>% summarize_all(sum)
NA
# finding the number of NA values by column in the dataframe
BRIC.static %>% mutate_all(is.na) %>% summarize_all(sum)

To DO: compute correlations by sector (10 sectors)

# regular correlation matrix of all (four) numeric attributes
cor(select(BRIC.static, where(is.numeric)))
the standard deviation is zero
        ICBSUC INDG WC06011 WC07021 WC07022 WC07023 WC07024 WC07025 WC07026
ICBSUC       1   NA      NA      NA      NA      NA      NA      NA      NA
INDG        NA    1      NA      NA      NA      NA      NA      NA      NA
WC06011     NA   NA       1      NA      NA      NA      NA      NA      NA
WC07021     NA   NA      NA       1      NA      NA      NA      NA      NA
WC07022     NA   NA      NA      NA       1      NA      NA      NA      NA
WC07023     NA   NA      NA      NA      NA       1      NA      NA      NA
WC07024     NA   NA      NA      NA      NA      NA       1      NA      NA
WC07025     NA   NA      NA      NA      NA      NA      NA       1      NA
WC07026     NA   NA      NA      NA      NA      NA      NA      NA       1
WC07027     NA   NA      NA      NA      NA      NA      NA      NA      NA
WC07028     NA   NA      NA      NA      NA      NA      NA      NA      NA
WC07041     NA   NA      NA      NA      NA      NA      NA      NA      NA
WC18272     NA   NA      NA      NA      NA      NA      NA      NA      NA
        WC07027 WC07028 WC07041 WC18272
ICBSUC       NA      NA      NA      NA
INDG         NA      NA      NA      NA
WC06011      NA      NA      NA      NA
WC07021      NA      NA      NA      NA
WC07022      NA      NA      NA      NA
WC07023      NA      NA      NA      NA
WC07024      NA      NA      NA      NA
WC07025      NA      NA      NA      NA
WC07026      NA      NA      NA      NA
WC07027       1      NA      NA      NA
WC07028      NA       1      NA      NA
WC07041      NA      NA       1      NA
WC18272      NA      NA      NA       1
# number of entries stocks per country
tabulate(as.factor(BRIC.monthly$country));
[1]  221368 1736707 3082737  484946
unique(BRIC.monthly$country)
[1] "BRA" "CHN" "RUS" "IND"
#weight CHN 
# unqiue industries
unique(BRIC.static$INDM)
  [1] "Iron & Steel"          "Broadline Retailers"   "Alt. Electricity"     
  [4] "Con. Electricity"      "Dur. Household Prod."  "Aerospace"            
  [7] "Auto Parts"            "Banks"                 "Food Products"        
 [10] "Automobiles"           "Commodity Chemicals"   "Paper"                
 [13] "Farm Fish Plantation"  "Specialty Chemicals"   "Industrial Machinery" 
 [16] "Fixed Line Telecom."   "Divers. Industrials"   "Alternative Fuels"    
 [19] "Unclassified"          "Consumer Electronics"  "Brewers"              
 [22] "Prop. & Casualty Ins." "Clothing & Accessory"  "Specialty Finance"    
 [25] "Computer Hardware"     "Comm. Vehicles,Trucks" "Real Estate Hold, Dev"
 [28] "Exploration & Prod."   "Nonferrous Metals"     "Footwear"             
 [31] "Electrical Equipment"  "Electronic Equipment"  "Apparel Retailers"    
 [34] "Airlines"              "Multiutilities"        "Integrated Oil & Gas" 
 [37] "Unquoted equities"     "Gas Distribution"      "Building Mat.& Fix."  
 [40] "Healthcare Providers"  "Home Construction"     "Media Agencies"       
 [43] "Medical Equipment"     "Railroads"             "Full Line Insurance"  
 [46] "Recreational Services" "Food Retail,Wholesale" "Transport Services"   
 [49] "Mobile Telecom."       "Hotels"                "Recreational Products"
 [52] "Furnishings"           "Business Support Svs." "Drug Retailers"       
 [55] "Heavy Construction"    "Water"                 "Tobacco"              
 [58] "Spec.Consumer Service" "Oil Equip. & Services" "Internet"             
 [61] "Biotechnology"         "Ind. & Office REITs"   "Diversified REITs"    
 [64] "Retail REITs"          "Personal Products"     "Software"             
 [67] "Financial Admin."      "Real Estate Services"  "Medical Supplies"     
 [70] "Consumer Finance"      "Investment Services"   "Pharmaceuticals"      
 [73] "Asset Managers"        "Computer Services"     "Industrial Suppliers" 
 [76] "Insurance Brokers"     "Restaurants & Bars"    "Specialty Retailers"  
 [79] "Travel & Tourism"      "Residential REITs"     "Coal"                 
 [82] "Soft Drinks"           "Renewable Energy Eq."  "Mortgage REITs"       
 [85] "Specialty REITs"       "Distillers & Vintners" "Containers & Package" 
 [88] "Telecom. Equipment"    "Aluminum"              "Nondur.Household Prod"
 [91] "Marine Transportation" "Publishing"            "Trucking"             
 [94] "Tires"                 "Home Improvement Ret." "Waste, Disposal Svs." 
 [97] "Semiconductors"        "Broadcast & Entertain" "General Mining"       
[100] "Delivery Services"     "Forestry"              "Diamonds & Gemstones" 
[103] "Toys"                  "Pipelines"             "Defense"              
[106] "Plat.& Precious Metal" "Gold Mining"           "Life Insurance"       
[109] "Bus.Train & Employmnt" "Elec. Office Equip."   "Mortgage Finance"     
[112] "Electricity"           "Investment Trusts"     "Mutual Funds"         
[115] "Reinsurance"          
# Real Estate: Residential REITs, Retail RETS, Diversified REITS, Mortgage REITS, Specialty REITS, Ind. & Office REITS
# Commodities: Iron & Steel, Commodity Chemicals, General Mining, Integrated Oil and Gas, Alternative Fuels, 
# Infrastructure: Railroads, Transportation Services, Alternative Fuels, Alt. Electricity
# cross tab plot of ownership interest and certain features with legend
# cex.names: expansion factor for the axis labels
barplot(with(BRIC.static, table(INDM)), beside = TRUE, legend.text = TRUE, main = "Crosstab", cex.names = 0.4)

# Market Cap values
summary(BRIC.monthly$MV.USD)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
0.00e+00 3.00e+00 4.40e+01 1.14e+05 4.30e+02 2.90e+10  4035736 
summary(BRIC.monthly$RET.USD)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   -100      -8       0       2       8     903 4044505 

Some conventions:

Characteristic should be calculated as in Hanauer & Lauterbach (2019) or in Hanauer (2020)

Big stocks should be defined as the biggest stocks which together account for 90% of a country’s aggregated market capitalization Benchmark should be defined as the cap-weighted universe of big stocks Returns should be in USD Breakpoints (for Fama-French factors) should be calculated on big stocks (as in the excursus) but both small and big stocks go into the factor calculation.

Benchmark Calculation

length(BRIC.static$Id)
[1] 11783
length(BRIC.yearly$Id)
[1] 459498
# joining the yearly and the static dataframe by the Id column (retainig all rows of BRIC.yearly)
df_combined <- left_join(x=BRIC.monthly,y=BRIC.static,by="Id")


head(df_combined)
NA
NA
NA
summary(df_combined$MV.USD)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
0.00e+00 3.00e+00 4.40e+01 1.14e+05 4.30e+02 2.90e+10  4035736 
dim(df_combined)
[1] 5525758      53
dim(BRIC.yearly)
[1] 459498    105
dim(BRIC.static)
[1] 11783    41
dim(BRIC.monthly)
[1] 5525758      13
## finding the number of NA values by column in the dataframe
BRIC.yearly %>% mutate_all(is.na) %>% summarize_all(sum)
# markt cap (USD): WC07210

## finding the number of NA values by column in the dataframe
df_combined %>% mutate_all(is.na) %>% summarize_all(sum)

Idea: calculate 90% of the sum of all stock market caps per country as a time series (store the result in a column )

# Big stocks should be defined as the biggest stocks which together account for 90% of # a country's aggregated market capitalization


# grouping the mcap values of individual stocks by country
mcap_country <- df_combined %>%
  filter(df_combined$MV.USD != "NA") %>% 
  group_by(country.x, ym) 

# computing the sum of the individual stock's market caps by country
country_mcap <- mcap_country %>%
group_by(country.x, ym) %>%
    summarize(mc_sum = sum(MV.USD))
`summarise()` regrouping output by 'country.x' (override with `.groups` argument)
country_mcap
NA
NA
russian_stocks <- as.data.frame(mcap_country) %>%
   filter(country.x == "RUS",ym) 
Error: Problem with `filter()` input `..2`.
x Input `..2` must be a logical vector, not a yearmon.
ℹ Input `..2` is `ym`.
Run `rlang::last_error()` to see where the error occurred.

idea:

big_stocks <- mcap_country %>% select(ISIN) %>% sort(mcap_country\(WC07210, decreasing=T) %>% filter(mcap_country\)WC07210 <= 0.9*country_mcap$mc_sum)

big_stocks

# sorting the stocks by market cap and extracting the ISINs of the biggest ones that make up 90% of a country's market cap

# RUSSIA
# 90% of the market cap in Russia: 
0.9*country_mcap$mc_sum[4]

# subsetting all Russian stocks
russian_stocks <- as.data.frame(mcap_country) %>%
   filter(country.x == "RUS") 

# sorting the dataframe of russian stocks by decreasing market cap
russian_stocks <- russian_stocks[order(russian_stocks$WC07210,decreasing = TRUE),]
 
# filtering out the big stocks which sum up to 90% of the market cap of Russian stocks
big_stocks_RUS <- russian_stocks[cumsum(russian_stocks$WC07210) <= 0.9*country_mcap$mc_sum[4],]

big_stocks_RUS



  
### Attempt ###


## Determine portfolio breakpoints for Size
# Fama-French take the MV from end-of-June and rebalance yearly
df_combined[,month := month(Date)]
df_combined[,year := year(Date)]
df_combined[,hcjun := ifelse(month>=7,year,year-1)]

# determine size portfolio allocation from July on using data that's public from end-of-June on
setorder(df_combined,Date,-MV.USD)
hlpvariable <-  df_combined[month==7 & !is.na(MV.USD),
                .(pf.size = ifelse((cumsum(MV.USD)/sum(MV.USD))>=0.9,"Small","Big"),Id),
                               by=year]

# Merge the size portfolio allocation back from July Y to June Y+1
panel_country <- merge(df_combined,hlpvariable,
                       by.x=c("hcjun","Id"),
                       by.y=c("year","Id"),
                       all.x=T)

panel_country



### Attempt end ###

Calculating the return of the market portfolio

summary(BRIC.monthly$MV.USD)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
0.00e+00 3.00e+00 4.40e+01 1.14e+05 4.30e+02 2.90e+10  4035736 
summary(BRIC.monthly$RET.USD)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   -100      -8       0       2       8     903 4044505 
# market beta regression
my.ols <- lm(data=BRIC.monthly, formula = RET.USD ~ MV.USD)

summary(my.ols)

Call:
lm(formula = RET.USD ~ MV.USD, data = BRIC.monthly)

Residuals:
    Min      1Q  Median      3Q     Max 
-101.76   -9.72   -1.94    5.75  901.21 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.783e+00  1.918e-02  92.951   <2e-16 ***
MV.USD      -1.649e-06  1.052e-06  -1.567    0.117    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 23.27 on 1475669 degrees of freedom
  (4050087 observations deleted due to missingness)
Multiple R-squared:  1.664e-06, Adjusted R-squared:  9.866e-07 
F-statistic: 2.456 on 1 and 1475669 DF,  p-value: 0.1171
  
# isolate beta
my.beta <- coef(my.ols)[2]

my.beta
       MV.USD 
-1.648943e-06 
LS0tCnRpdGxlOiAiQlJJQ19wcm9qZWN0IgphdXRob3I6IAogIG5hbWU6IE1hbnVlbCBTY2hyZWliZXIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGxhdGV4X2VuZ2luZTogcGRmbGF0ZXgKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICBoZWFkZXItaW5jbHVkZXM6CiAgIC0gXHVzZXBhY2thZ2V7YW1zbWF0aH0KICAgLSBcdXNlcGFja2FnZXthbXNmb250c30KLS0tCgoqKkJSSUMgUHJvamVjdCoqCgpgYGB7cn0KIyBjbGVhciB3b3Jrc3BhY2UKIyNybShsaXN0PWxzKCkpCmBgYAoKCmdldHRpbmcgdGhlIGN1cnJlbnQgV0QKCmBgYHtyfQpnZXR3ZCgpCmBgYAoKY2hhbmdpbmcgdGhlIFdECgpgYGB7cn0KIyNzZXR3ZCgiL1VzZXJzL01hbnUvRGVza3RvcC9UVU1fTWFzdGVyX01ndF9UZWNobm9sb2d5L1RVTV9TU18yMS9FbXBpcmljYWwgQXNzZXQgUHJpY2luZyBzZW1pbmFyL1NlbWluYXIgVGhlc2lzL0JSSUNfZGF0YSIpCmBgYAoKIyBMb2FkaW5nIExpYnJhcmllcwoKYGBge3J9CiMgbG9hZGluZyBsaWJyYXJpZXMKbGlicmFyeShkYXRhLnRhYmxlKSAjIGV4dGVuc2lvbiBvZiB0aGUgZGF0YS5mcmFtZSBwYWNrYWdlLiBJdCBpcyB3aWRlbHkgdXNlZCBmb3IgZmFzdCBhZ2dyZWdhdGlvbiBvZiBsYXJnZSBkYXRhc2V0cywgbG93IGxhdGVuY3kgYWRkL3VwZGF0ZS9yZW1vdmUgb2YgY29sdW1ucywgcXVpY2tlciBvcmRlcmVkIGpvaW5zLCBhbmQgYSBmYXN0IGZpbGUgcmVhZGVyLgpsaWJyYXJ5KGRwbHlyKSAjIGRhdGEgbWFuaXB1bGF0aW9uIHBhY2thZ2UKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoem9vKSAjIG1ldGhvZHMgZm9yIHRvdGFsbHkgb3JkZXJlZCBpbmRleGVkIG9ic2VydmF0aW9ucy4gSXQgYWltcyBhdCBwZXJmb3JtaW5nIGNhbGN1bGF0aW9ucyBjb250YWluaW5nIGlycmVndWxhciB0aW1lIHNlcmllcyBvZiBudW1lcmljIHZlY3RvcnMsIG1hdHJpY2VzICYgZmFjdG9ycwoKbGlicmFyeShzdGF0cykKbGlicmFyeSh1dGlscykKCmBgYAoKCiMgTG9hZGluZyBpbiB0aGUgUi5kYXRhCgpEYXRhIGNvbHVtbiBkZXNjcmlwdGlvbnMgKFdvcmxkc2NvcGUpOgpodHRwczovL3d3dy5wcm9mZXNzb3JzLndpLnR1bS5kZS9maWxlYWRtaW4vdzAwYmNhL2ZtL1dvcmxkc2NvcGVfRGF0YV9EZWZpbml0aW9uX0d1aWRlX0lzc3VlXzE1LnBkZgoKaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMVl0dUppdjYwUTZuS0lhRkpMUVk2MHNHUUVyYnNsXzhudlBkVUhtdk84dk0vZWRpdD91c3A9c2hhcmluZwoKCgpgYGB7cn0KIyBsb2FkaW5nIFIuZGF0YSBCUklDIG1vbnRobHkKbG9hZCgiL1VzZXJzL01hbnUvRGVza3RvcC9UVU1fTWFzdGVyX01ndF9UZWNobm9sb2d5L1RVTV9TU18yMS9FbXBpcmljYWwgQXNzZXQgUHJpY2luZyBzZW1pbmFyL1NlbWluYXIgVGhlc2lzL0JSSUNfZGF0YS9CUklDX21vbnRobHkuUkRhdGEiKQoKIyBsb2FkaW5nIFIuZGF0YSBCUklDIG1vbnRobHkKbG9hZCgiL1VzZXJzL01hbnUvRGVza3RvcC9UVU1fTWFzdGVyX01ndF9UZWNobm9sb2d5L1RVTV9TU18yMS9FbXBpcmljYWwgQXNzZXQgUHJpY2luZyBzZW1pbmFyL1NlbWluYXIgVGhlc2lzL0JSSUNfZGF0YS9CUklDX3N0YXRpYy5SRGF0YSIpCgojIGxvYWRpbmcgUi5kYXRhIEJSSUMgbW9udGhseQpsb2FkKCIvVXNlcnMvTWFudS9EZXNrdG9wL1RVTV9NYXN0ZXJfTWd0X1RlY2hub2xvZ3kvVFVNX1NTXzIxL0VtcGlyaWNhbCBBc3NldCBQcmljaW5nIHNlbWluYXIvU2VtaW5hciBUaGVzaXMvQlJJQ19kYXRhL0JSSUNfeWVhcmx5LlJEYXRhIikKYGBgCgpgYGB7cn0Kc3RyKEJSSUMubW9udGhseSkKYGBgCgojIEltcG9ydGluZyB0aGUgUmlzayBmcmVlIFJhdGUgRGF0YQoKZG93bmxvYWQgVC1iaWxsIGRhdGEgZnJvbSBLZW5uZXRoIEZyZW5jaCBXZWJzaXRlIGZvciB0aGUgcmlzayBmcmVlIHJhdGUKCmBgYHtyfQojIGltcG9ydCB0aGUgS2VubmV0aC9GcmVuY2ggcmlzayBmcmVlIHJhdGUgKDFtb250aCBULWJpbGwgcmF0ZSkKa2ZfZGF0YSA8LSByZWFkLmNzdigiL1VzZXJzL01hbnUvRGVza3RvcC9UVU1fTWFzdGVyX01ndF9UZWNobm9sb2d5L1RVTV9TU18yMS9FbXBpcmljYWwgQXNzZXQgUHJpY2luZyBzZW1pbmFyL1NlbWluYXIgVGhlc2lzL0JSSUNfZGF0YS9GX0ZfUmVzZWFyY2hfRGF0YV9GYWN0b3JzLmNzdiIpCgprZl9kYXRhCgojIGV4dHJhY3RpbmcgdGhlIHJpc2sgZnJlZSByYXRlCm9uZV9tX3RiaWxsIDwtIGtmX2RhdGEkUkYKCgp0YWlsKGtmX2RhdGEpCgpgYGAKCgoKYGBge3J9CiMgc3VtbWFyeSBzdGF0cwpzdW1tYXJ5KEJSSUMubW9udGhseSkKYGBgCgoKCmBgYHtyfQpzdHIoQlJJQy5zdGF0aWMpCmBgYAoKSVNJTjogSW50ZXJuYXRpb25hbCBTZWN1cml0eSBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKHN0b2NrIGlkZW50aWZpZXIpCkVTVEFUOiBhY3RpdmUgdnMgaW5hY3RpdmUgY29tcGFueSAocHVibGljbHkgbGlzdGVkIG9yIG5vdCkKSWQ6IGpvaW4gY29sdW1uIHdpdGggQlJJQy55ZWFybHkgZGF0YWZyYW1lCklORE06IGluZHVzdHJ5IHNlY3RvciBjb2RlCgpHRU9HTjogZ2VvZ3JhcGhpYyBncm91cCBuYW1lCkdFT0xOOiBnZW9ncmFwaGljIGxvY2F0aW9uCgpMaXN0IG9mIERhdGFiYXNlIGNvZGVzOgpodHRwczovL3d3dy5id2wudW5pLW1hbm5oZWltLmRlL21lZGlhL0xlaHJzdHVlaGxlL2J3bC9NYXVnL0RhdGFiYXNlX2luZm8vRGF0YXN0cmVhbV9kYXRheXBlcy5wZGYKCmBgYHtyfQpzdHIoQlJJQy55ZWFybHkpCgpoZWFkKEJSSUMueWVhcmx5KQpgYGAKCklEOiA/PwpDb3VudHJ5OiA0IEJSSUMgQ09VTlRSWSBDT0RFUwpJQ0JTVUM6IGluZHVzdHJpYWwgY2xhc3NpZmljYXRpb24gYmVuY2htYXJrCmh0dHBzOi8vbGluay5zcHJpbmdlci5jb20vY29udGVudC9wZGYvYmJtJTNBOTc4LTMtODM1MC05NTMxLTElMkYxLnBkZgoKV0MwNzAyMTogU0lDKHN0YW5kYXJkIGluZHVzdHJpYWwgY2xhc3NpZmljYXRpb24pIHByaW1hcnkgY29kZSBmcm9tIFdvcmxkc2NvcGUKVzA1NjUxOiBDb21tb24gU2hhcmVzIFRyYWRlZCAtIEFubnVhbCAoU2VjdXJpdHkpCgoKYGBge3J9CnN1bW1hcnkoQlJJQy55ZWFybHkpCmBgYAoKCipUTyBETydzKjoKCi0gQ2FsY3VsYXRlIEJlbmNobWFyayAobWFya2V0LWNhcCB3ZWlnaHRlZCBiaWcgc3RvY2tzIG9mIHRoZSBCUklDIHJlZ2lvbikKLSBDYWxjdWxhdGUgYnJlYWsgcG9pbnRzIG9uIGJpZyBzdG9ja3MKLSBkZWNpZGUgb24gc3RyYXRlZ3kgYW5kIGltcGxlbWVudCBpdAotIGNhbGN1bGF0ZSBwb3J0Zm9saW8gY2hhcmFjdGVyaXN0aWNzCi0gdmlzdWFsaXplIGFuZCBzaG93Y2FzZSBzdHJhdGVneSBwZXJmb3JtYW5jZQotIHJlZ3Jlc3Mgc3RyYXRlZ3kgUEYgb24gRkY1Rk0gYW5kIG1vbWVudHVtIGZvciBzdHlsZSBleHBvc3VyZSBhbmFseXNpcwotIExpdGVyYXR1cmUgCgoKKlByb2plY3QgRGF0ZXMqOgpUaGVzaXMgc3VibWlzc2lvbjogSnVuZSAyMQpGaW5hbCBwcmVzZW50YXRpb246IEp1bmUgMDcKCipTdHJhdGVneSo6CkdEUCB3ZWlnaHRlZCBjb3VudHJpZXM7IHN0b2NrIGxldmVsOiBtYXggc2hhcnBlIHJhdGlvLCBtaW4gdm9sYXRpbGl0eSwgZXF1YWwgc2VjdG9yIHdlaWdodHMgb3IgcXVvdGFzLCBtb21lbnR1bT8KCgpFREEKCgpgYGB7cn0Kc3VtbWFyeShCUklDLm1vbnRobHkkeW0pCmBgYAoKCmBgYHtyfQojIGZpbmRpbmcgdGhlIG51bWJlciBvZiBOQSB2YWx1ZXMgYnkgY29sdW1uIGluIHRoZSBkYXRhZnJhbWUKQlJJQy5tb250aGx5ICU+JSBtdXRhdGVfYWxsKGlzLm5hKSAlPiUgc3VtbWFyaXplX2FsbChzdW0pCgpgYGAKCmBgYHtyfQojIGZpbmRpbmcgdGhlIG51bWJlciBvZiBOQSB2YWx1ZXMgYnkgY29sdW1uIGluIHRoZSBkYXRhZnJhbWUKQlJJQy5zdGF0aWMgJT4lIG11dGF0ZV9hbGwoaXMubmEpICU+JSBzdW1tYXJpemVfYWxsKHN1bSkKYGBgCgoKVG8gRE86IGNvbXB1dGUgY29ycmVsYXRpb25zIGJ5IHNlY3RvciAoMTAgc2VjdG9ycykKCmBgYHtyfQojIHJlZ3VsYXIgY29ycmVsYXRpb24gbWF0cml4IG9mIGFsbCAoZm91cikgbnVtZXJpYyBhdHRyaWJ1dGVzCmNvcihzZWxlY3QoQlJJQy5zdGF0aWMsIHdoZXJlKGlzLm51bWVyaWMpKSkKYGBgCgoKYGBge3J9CiMgbnVtYmVyIG9mIGVudHJpZXMgc3RvY2tzIHBlciBjb3VudHJ5CnRhYnVsYXRlKGFzLmZhY3RvcihCUklDLm1vbnRobHkkY291bnRyeSkpOwoKdW5pcXVlKEJSSUMubW9udGhseSRjb3VudHJ5KQoKI3dlaWdodCBDSE4gCmBgYAoKYGBge3J9CiMgdW5xaXVlIGluZHVzdHJpZXMKdW5pcXVlKEJSSUMuc3RhdGljJElORE0pCiMgUmVhbCBFc3RhdGU6IFJlc2lkZW50aWFsIFJFSVRzLCBSZXRhaWwgUkVUUywgRGl2ZXJzaWZpZWQgUkVJVFMsIE1vcnRnYWdlIFJFSVRTLCBTcGVjaWFsdHkgUkVJVFMsIEluZC4gJiBPZmZpY2UgUkVJVFMKIyBDb21tb2RpdGllczogSXJvbiAmIFN0ZWVsLCBDb21tb2RpdHkgQ2hlbWljYWxzLCBHZW5lcmFsIE1pbmluZywgSW50ZWdyYXRlZCBPaWwgYW5kIEdhcywgQWx0ZXJuYXRpdmUgRnVlbHMsIAojIEluZnJhc3RydWN0dXJlOiBSYWlscm9hZHMsIFRyYW5zcG9ydGF0aW9uIFNlcnZpY2VzLCBBbHRlcm5hdGl2ZSBGdWVscywgQWx0LiBFbGVjdHJpY2l0eQpgYGAKCmBgYHtyfQojIGNyb3NzIHRhYiBwbG90IG9mIG93bmVyc2hpcCBpbnRlcmVzdCBhbmQgY2VydGFpbiBmZWF0dXJlcyB3aXRoIGxlZ2VuZAojIGNleC5uYW1lczogZXhwYW5zaW9uIGZhY3RvciBmb3IgdGhlIGF4aXMgbGFiZWxzCmJhcnBsb3Qod2l0aChCUklDLnN0YXRpYywgdGFibGUoSU5ETSkpLCBiZXNpZGUgPSBUUlVFLCBsZWdlbmQudGV4dCA9IFRSVUUsIG1haW4gPSAiQ3Jvc3N0YWIiLCBjZXgubmFtZXMgPSAwLjQpCgpgYGAKCgoKYGBge3J9CiMgTWFya2V0IENhcCB2YWx1ZXMKc3VtbWFyeShCUklDLm1vbnRobHkkTVYuVVNEKQpzdW1tYXJ5KEJSSUMubW9udGhseSRSRVQuVVNEKQoKYGBgCgoKCioqU29tZSBjb252ZW50aW9uczoqKgoKQ2hhcmFjdGVyaXN0aWMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYXMgaW4gSGFuYXVlciAmIExhdXRlcmJhY2ggKDIwMTkpIG9yIGluIEhhbmF1ZXIgKDIwMjApCgpCaWcgc3RvY2tzIHNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBiaWdnZXN0IHN0b2NrcyB3aGljaCB0b2dldGhlciBhY2NvdW50IGZvciA5MCUgb2YgYQpjb3VudHJ5J3MgYWdncmVnYXRlZCBtYXJrZXQgY2FwaXRhbGl6YXRpb24KQmVuY2htYXJrIHNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBjYXAtd2VpZ2h0ZWQgdW5pdmVyc2Ugb2YgYmlnIHN0b2NrcwpSZXR1cm5zIHNob3VsZCBiZSBpbiBVU0QKQnJlYWtwb2ludHMgKGZvciBGYW1hLUZyZW5jaCBmYWN0b3JzKSBzaG91bGQgYmUgY2FsY3VsYXRlZCBvbiBiaWcgc3RvY2tzIChhcyBpbiB0aGUKZXhjdXJzdXMpIGJ1dCBib3RoIHNtYWxsIGFuZCBiaWcgc3RvY2tzIGdvIGludG8gdGhlIGZhY3RvciBjYWxjdWxhdGlvbi4KCiMgQmVuY2htYXJrIENhbGN1bGF0aW9uCgpgYGB7cn0KbGVuZ3RoKEJSSUMuc3RhdGljJElkKQoKbGVuZ3RoKEJSSUMueWVhcmx5JElkKQoKYGBgCgpgYGB7cn0KIyBqb2luaW5nIHRoZSBtb250aGx5IGFuZCB0aGUgc3RhdGljIGRhdGFmcmFtZSBieSB0aGUgSWQgY29sdW1uIChyZXRhaW5pZyBhbGwgcm93cyBvZiBCUklDLnllYXJseSkKZGZfY29tYmluZWQgPC0gbGVmdF9qb2luKHg9QlJJQy5tb250aGx5LHk9QlJJQy5zdGF0aWMsYnk9IklkIikKCgpoZWFkKGRmX2NvbWJpbmVkKQoKCgpgYGAKCmBgYHtyfQpzdW1tYXJ5KGRmX2NvbWJpbmVkJE1WLlVTRCkKYGBgCgoKYGBge3J9CmRpbShkZl9jb21iaW5lZCkKCmRpbShCUklDLnllYXJseSkKCmRpbShCUklDLnN0YXRpYykKCmRpbShCUklDLm1vbnRobHkpCmBgYAoKYGBge3J9CiMjIGZpbmRpbmcgdGhlIG51bWJlciBvZiBOQSB2YWx1ZXMgYnkgY29sdW1uIGluIHRoZSBkYXRhZnJhbWUKQlJJQy55ZWFybHkgJT4lIG11dGF0ZV9hbGwoaXMubmEpICU+JSBzdW1tYXJpemVfYWxsKHN1bSkKYGBgCgoKCmBgYHtyfQojIG1hcmt0IGNhcCAoVVNEKTogV0MwNzIxMAoKIyMgZmluZGluZyB0aGUgbnVtYmVyIG9mIE5BIHZhbHVlcyBieSBjb2x1bW4gaW4gdGhlIGRhdGFmcmFtZQpkZl9jb21iaW5lZCAlPiUgbXV0YXRlX2FsbChpcy5uYSkgJT4lIHN1bW1hcml6ZV9hbGwoc3VtKQpgYGAKCgoKCklkZWE6IGNhbGN1bGF0ZSA5MCUgb2YgdGhlIHN1bSBvZiBhbGwgc3RvY2sgbWFya2V0IGNhcHMgcGVyIGNvdW50cnkgYXMgYSB0aW1lIHNlcmllcwooc3RvcmUgdGhlIHJlc3VsdCBpbiBhIGNvbHVtbiApCgpgYGB7cn0KIyBCaWcgc3RvY2tzIHNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBiaWdnZXN0IHN0b2NrcyB3aGljaCB0b2dldGhlciBhY2NvdW50IGZvciA5MCUgb2YgIyBhIGNvdW50cnkncyBhZ2dyZWdhdGVkIG1hcmtldCBjYXBpdGFsaXphdGlvbgoKCiMgZ3JvdXBpbmcgdGhlIG1jYXAgdmFsdWVzIG9mIGluZGl2aWR1YWwgc3RvY2tzIGJ5IGNvdW50cnkKbWNhcF9jb3VudHJ5IDwtIGRmX2NvbWJpbmVkICU+JQogIGZpbHRlcihkZl9jb21iaW5lZCRNVi5VU0QgIT0gIk5BIikgJT4lIAogIGdyb3VwX2J5KGNvdW50cnkueCwgeW0pIAoKIyBjb21wdXRpbmcgdGhlIHN1bSBvZiB0aGUgaW5kaXZpZHVhbCBzdG9jaydzIG1hcmtldCBjYXBzIGJ5IGNvdW50cnkKY291bnRyeV9tY2FwIDwtIG1jYXBfY291bnRyeSAlPiUKZ3JvdXBfYnkoY291bnRyeS54LCB5bSkgJT4lCiAgICBzdW1tYXJpemUobWNfc3VtID0gc3VtKE1WLlVTRCkpCgpjb3VudHJ5X21jYXAKCgpgYGAKCgpgYGB7cn0KIyBzb3J0aW5nIHRoZSBzdG9ja3MgYnkgbWFya2V0IGNhcCBhbmQgZXh0cmFjdGluZyB0aGUgSVNJTnMgb2YgdGhlIGJpZ2dlc3Qgb25lcyB0aGF0IG1ha2UgdXAgOTAlIG9mIGEgY291bnRyeSdzIG1hcmtldCBjYXAKCiMgUlVTU0lBCiMgOTAlIG9mIHRoZSBtYXJrZXQgY2FwIGluIFJ1c3NpYTogCjAuOSpjb3VudHJ5X21jYXAkbWNfc3VtWzRdCgojIHN1YnNldHRpbmcgYWxsIFJ1c3NpYW4gc3RvY2tzCnJ1c3NpYW5fc3RvY2tzIDwtIGFzLmRhdGEuZnJhbWUobWNhcF9jb3VudHJ5KSAlPiUKICAgZmlsdGVyKGNvdW50cnkueCA9PSAiUlVTIikgCgojIHNvcnRpbmcgdGhlIGRhdGFmcmFtZSBvZiBydXNzaWFuIHN0b2NrcyBieSBkZWNyZWFzaW5nIG1hcmtldCBjYXAKcnVzc2lhbl9zdG9ja3MgPC0gcnVzc2lhbl9zdG9ja3Nbb3JkZXIocnVzc2lhbl9zdG9ja3MkV0MwNzIxMCxkZWNyZWFzaW5nID0gVFJVRSksXQogCiMgZmlsdGVyaW5nIG91dCB0aGUgYmlnIHN0b2NrcyB3aGljaCBzdW0gdXAgdG8gOTAlIG9mIHRoZSBtYXJrZXQgY2FwIG9mIFJ1c3NpYW4gc3RvY2tzCmJpZ19zdG9ja3NfUlVTIDwtIHJ1c3NpYW5fc3RvY2tzW2N1bXN1bShydXNzaWFuX3N0b2NrcyRXQzA3MjEwKSA8PSAwLjkqY291bnRyeV9tY2FwJG1jX3N1bVs0XSxdCgpiaWdfc3RvY2tzX1JVUwoKCgogIApgYGAKCgppZGVhOgoKYmlnX3N0b2NrcyA8LSBtY2FwX2NvdW50cnkgJT4lCiAgc2VsZWN0KElTSU4pICU+JQogc29ydChtY2FwX2NvdW50cnkkV0MwNzIxMCwgZGVjcmVhc2luZz1UKSAgJT4lCiAgZmlsdGVyKG1jYXBfY291bnRyeSRXQzA3MjEwIDw9IDAuOSpjb3VudHJ5X21jYXAkbWNfc3VtKQoKYmlnX3N0b2NrcwoKYGBge3J9CiMgc29ydGluZyB0aGUgc3RvY2tzIGJ5IG1hcmtldCBjYXAgYW5kIGV4dHJhY3RpbmcgdGhlIElTSU5zIG9mIHRoZSBiaWdnZXN0IG9uZXMgdGhhdCBtYWtlIHVwIDkwJSBvZiBhIGNvdW50cnkncyBtYXJrZXQgY2FwCgojIFJVU1NJQQojIDkwJSBvZiB0aGUgbWFya2V0IGNhcCBpbiBSdXNzaWE6IAowLjkqY291bnRyeV9tY2FwJG1jX3N1bVs0XQoKIyBzdWJzZXR0aW5nIGFsbCBSdXNzaWFuIHN0b2NrcwpydXNzaWFuX3N0b2NrcyA8LSBhcy5kYXRhLmZyYW1lKG1jYXBfY291bnRyeSkgJT4lCiAgIGZpbHRlcihjb3VudHJ5LnggPT0gIlJVUyIpIAoKIyBzb3J0aW5nIHRoZSBkYXRhZnJhbWUgb2YgcnVzc2lhbiBzdG9ja3MgYnkgZGVjcmVhc2luZyBtYXJrZXQgY2FwCnJ1c3NpYW5fc3RvY2tzIDwtIHJ1c3NpYW5fc3RvY2tzW29yZGVyKHJ1c3NpYW5fc3RvY2tzJFdDMDcyMTAsZGVjcmVhc2luZyA9IFRSVUUpLF0KIAojIGZpbHRlcmluZyBvdXQgdGhlIGJpZyBzdG9ja3Mgd2hpY2ggc3VtIHVwIHRvIDkwJSBvZiB0aGUgbWFya2V0IGNhcCBvZiBSdXNzaWFuIHN0b2NrcwpiaWdfc3RvY2tzX1JVUyA8LSBydXNzaWFuX3N0b2Nrc1tjdW1zdW0ocnVzc2lhbl9zdG9ja3MkV0MwNzIxMCkgPD0gMC45KmNvdW50cnlfbWNhcCRtY19zdW1bNF0sXQoKYmlnX3N0b2Nrc19SVVMKCgoKICAKYGBgCgoKYGBge3J9CiMjIyBBdHRlbXB0ICMjIwoKCiMjIERldGVybWluZSBwb3J0Zm9saW8gYnJlYWtwb2ludHMgZm9yIFNpemUKIyBGYW1hLUZyZW5jaCB0YWtlIHRoZSBNViBmcm9tIGVuZC1vZi1KdW5lIGFuZCByZWJhbGFuY2UgeWVhcmx5CmRmX2NvbWJpbmVkWyxtb250aCA6PSBtb250aChEYXRlKV0KZGZfY29tYmluZWRbLHllYXIgOj0geWVhcihEYXRlKV0KZGZfY29tYmluZWRbLGhjanVuIDo9IGlmZWxzZShtb250aD49Nyx5ZWFyLHllYXItMSldCgojIGRldGVybWluZSBzaXplIHBvcnRmb2xpbyBhbGxvY2F0aW9uIGZyb20gSnVseSBvbiB1c2luZyBkYXRhIHRoYXQncyBwdWJsaWMgZnJvbSBlbmQtb2YtSnVuZSBvbgpzZXRvcmRlcihkZl9jb21iaW5lZCxEYXRlLC1NVi5VU0QpCmhscHZhcmlhYmxlIDwtICBkZl9jb21iaW5lZFttb250aD09NyAmICFpcy5uYShNVi5VU0QpLAogICAgICAgICAgICAgICAgLihwZi5zaXplID0gaWZlbHNlKChjdW1zdW0oTVYuVVNEKS9zdW0oTVYuVVNEKSk+PTAuOSwiU21hbGwiLCJCaWciKSxJZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieT15ZWFyXQoKIyBNZXJnZSB0aGUgc2l6ZSBwb3J0Zm9saW8gYWxsb2NhdGlvbiBiYWNrIGZyb20gSnVseSBZIHRvIEp1bmUgWSsxCnBhbmVsX2NvdW50cnkgPC0gbWVyZ2UoZGZfY29tYmluZWQsaGxwdmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgYnkueD1jKCJoY2p1biIsIklkIiksCiAgICAgICAgICAgICAgICAgICAgICAgYnkueT1jKCJ5ZWFyIiwiSWQiKSwKICAgICAgICAgICAgICAgICAgICAgICBhbGwueD1UKQoKcGFuZWxfY291bnRyeQoKCgojIyMgQXR0ZW1wdCBlbmQgIyMjCmBgYAoKCgoKCgojIENhbGN1bGF0aW5nIHRoZSByZXR1cm4gb2YgdGhlIG1hcmtldCBwb3J0Zm9saW8KCmBgYHtyfQpzdW1tYXJ5KEJSSUMubW9udGhseSRNVi5VU0QpCgpzdW1tYXJ5KEJSSUMubW9udGhseSRSRVQuVVNEKQoKIyBtYXJrZXQgYmV0YSByZWdyZXNzaW9uCm15Lm9scyA8LSBsbShkYXRhPUJSSUMubW9udGhseSwgZm9ybXVsYSA9IFJFVC5VU0QgfiBNVi5VU0QpCgpzdW1tYXJ5KG15Lm9scykKICAKIyBpc29sYXRlIGJldGEKbXkuYmV0YSA8LSBjb2VmKG15Lm9scylbMl0KCm15LmJldGEKCmBgYAoKCgoK